package Cache;

import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Set;

public class LRU {
    /**
     * 使用LinkedHashMap模拟最近最少使用算法
     * 头结点代表最不经常使用的节点， 满时再添加就删除头结点，再添加
     * */
    private LinkedHashMap<Integer,Integer> cache;
    private int capacity;

    public LRU(int capacity){
        cache = new LinkedHashMap<>();
        this.capacity = capacity;
    }

    public void put(int key, int value){
        //如果当前key存在,删除key
        if(cache.containsKey(key)){
            cache.remove(key);
        }
        //如果已经满了，需要删除最近最不使用的
        if(cache.size()==capacity){
            Set<Integer> keySet = cache.keySet();   //获得key集合
            Iterator<Integer> iterator = keySet.iterator(); //迭代器遍历可以获得第一个key
            cache.remove(iterator.next()); //删除第一个key
        }
        cache.put(key,value);
    }

    public int get(int key){
        if(!cache.containsKey(key))
        {
            return -1;
        }

        //存在，先从链表头部删除删除，在插入到链表尾部
        int val = cache.get(key);
        cache.remove(key);
        cache.put(key, val);

        return val;

    }
}
